home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / decoder / txt / decode.h < prev    next >
C/C++ Source or Header  |  1999-02-08  |  4KB  |  176 lines

  1. #ifndef DECODE_H
  2. #define DECODE_H
  3.  
  4. #define uchar unsigned char
  5. #define ushort unsigned short
  6. #define ulong unsigned long
  7.  
  8. struct YUVTable {
  9.   long ubTab[256];
  10.   long vrTab[256];
  11.   long ugTab[256];
  12.   long vgTab[256];
  13.   long yTab[256];
  14. };
  15.  
  16. struct YUVBuffer {
  17.   uchar *yBuf;
  18.   uchar *uBuf;
  19.   uchar *vBuf;
  20. };
  21.  
  22. typedef struct {
  23.   uchar alpha;
  24.   uchar red;
  25.   uchar green;
  26.   uchar blue;
  27. } RGBTriple;
  28.  
  29. #define CommonData              \
  30.   uchar gray;                   \
  31.   uchar dither;                 \
  32.   struct YUVTable *yuvTab;      \
  33.   struct YUVBuffer *yuvBuf;     \
  34.   uchar *rngLimit;              \
  35.   uchar *remapPal;              \
  36.   struct RGBTriple *penPal      \
  37.  
  38. #define scale4  4369
  39. #define scale5  2114
  40. #define scale6  1040
  41. #define scale8   257
  42. #define scale9   128
  43. #define scale10   64
  44. #define scale11   32
  45. #define scale13    8
  46.  
  47. #define NULL 0L
  48.  
  49. #define REG(d) register __ ## d
  50.  
  51. /* /// "RGBto332" */
  52. #define RGBto332(r,g,b,scale) (uchar)((((r*scale) & 0xe000)>>0x08) | (((g*scale) & 0xe000)>>0x0b) | (((b*scale) & 0xc000)>>0x0e))
  53. /* \\\ */
  54.  
  55. /* /// "RGB5toGray" */
  56. #define RGB5toGray(r,g,b) (uchar)((scale10*(r*11+g*16+b*5)) >> 8)
  57. /* \\\ */
  58.  
  59. /* /// "RGB8toGray" */
  60. #define RGB8toGray(r,g,b) (uchar)((r*11+g*16+b*5) >> 5)
  61. /* \\\ */
  62.  
  63. /* /// "ColorToRGB" */
  64. #define ColorToRGB(color,r,g,b) {                   \
  65.   ulong _r, _g, _b;                                 \
  66.   _r=(color >> 10) & 0x1f; r=(_r << 3) | (_r >> 2); \
  67.   _g=(color >>  5) & 0x1f; g=(_g << 3) | (_g >> 2); \
  68.   _b= color & 0x1f;        b=(_b << 3) | (_b >> 2); \
  69. }
  70. /* \\\ */
  71.  
  72. /* /// "ColorTo332" */
  73. #define ColorTo332(from,to) {        \
  74.   ulong r,g,b;                       \
  75.   r = (from >> 10) & 0x1f;           \
  76.   g = (from >>  5) & 0x1f;           \
  77.   b =  from & 0x1f;                  \
  78.   to=remap[RGBto332(r,g,b,scale5)];  \
  79. }
  80. /* \\\ */
  81.  
  82. /* /// "ColorTo332Gray" */
  83. #define ColorTo332Gray(from,to) { \
  84.   ulong r,g,b;                    \
  85.   r=(from >> 10) & 0x1f;          \
  86.   g=(from >>  5) & 0x1f;          \
  87.   b= from & 0x1f;                 \
  88.   to=RGB5toGray(r,g,b);           \
  89. }
  90. /* \\\ */
  91.  
  92.  
  93.  
  94. /* /// "Idx332ToRGB" */
  95. #define Idx332ToRGB(idx,r,g,b) { \
  96.   r=pens[idx].red;               \
  97.   g=pens[idx].green;             \
  98.   b=pens[idx].blue;              \
  99. }
  100. /* \\\ */
  101.  
  102. /* /// "RGBtoCol332" */
  103. #define RGBtoCol332(r,g,b,scale) (      \
  104.   ((((r)*(scale)) & rMask) >> rShift) | \
  105.   ((((g)*(scale)) & gMask) >> gShift) | \
  106.   ((((b)*(scale)) & bMask) >> bShift) )
  107. /* \\\ */
  108.  
  109. /* /// "RGB16toColor" */
  110. #define RGB16toColor(rgb16,col332) {       \
  111.   ulong r,g,b;                             \
  112.   r = (rgb16 >> 10) & 0x1f;                \
  113.   g = (rgb16 >>  5) & 0x1f;                \
  114.   b =  rgb16        & 0x1f;                \
  115.   col332=remap[RGBtoCol332(r,g,b,scale5)]; \
  116. }
  117. /* \\\ */
  118.  
  119. /* /// "RGB16toColorNoMap" */
  120. #define RGB16toColorNoMap(rgb16,col332) { \
  121.   ulong r,g,b;                            \
  122.   r = (rgb16 >> 10) & 0x1f;               \
  123.   g = (rgb16 >>  5) & 0x1f;               \
  124.   b =  rgb16        & 0x1f;               \
  125.   col332=RGBtoCol332(r,g,b,scale5);       \
  126. }
  127. /* \\\ */
  128.  
  129. /* /// "RGB24toColor" */
  130. #define RGB24toColor(r,g,b,col332) {       \
  131.   col332=remap[RGBtoCol332(r,g,b,scale8)]; \
  132. }
  133. /* \\\ */
  134.  
  135. /* /// "RGB24toColorNoMap" */
  136. #define RGB24toColorNoMap(r,g,b,col332) { \
  137.   col332=RGBtoCol332(r,g,b,scale8);       \
  138. }
  139. /* \\\ */
  140.  
  141. /* /// "RGB16toRGB24" */
  142. #define RGB16toRGB24(rgb16,r,g,b) {                 \
  143.   ulong _r, _g, _b;                                 \
  144.   _r=(rgb16 >> 10) & 0x1f; r=(_r << 3) | (_r >> 2); \
  145.   _g=(rgb16 >>  5) & 0x1f; g=(_g << 3) | (_g >> 2); \
  146.   _b= rgb16        & 0x1f; b=(_b << 3) | (_b >> 2); \
  147. }
  148. /* \\\ */
  149.  
  150. /* /// "get16pc" */
  151. #define get16pc(dptr) (*dptr++) | (*dptr++)<<8
  152. /* \\\ */
  153.  
  154. /* /// "get16" */
  155. #define get16(dptr) (*dptr++)<<8 | (*dptr++)
  156. /* \\\ */
  157.  
  158. /* /// "get24pc" */
  159. #define get24pc(dptr) (*dptr++) | (*dptr++)<<8 | (*dptr++)<<16
  160. /* \\\ */
  161.  
  162. /* /// "get24" */
  163. #define get24(dptr) (*dptr++)<<16 | (*dptr++)<<8 | (*dptr++)
  164. /* \\\ */
  165.  
  166. /* /// "get32pc" */
  167. #define get32pc(dptr) (*dptr++) | (*dptr++)<<8 | (*dptr++)<<16 | (*dptr++)<<24
  168. /* \\\ */
  169.  
  170. /* /// "get32" */
  171. #define get32(dptr) (*dptr++)<<24 | (*dptr++)<<16 | (*dptr++)<<8 | (*dptr++)
  172. /* \\\ */
  173.  
  174. #endif
  175.  
  176.